{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 查询",
   "id": "ee3efd7b6be50597"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-11T07:09:45.014799Z",
     "start_time": "2025-09-11T07:09:44.163670Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "path = 'D:/2506A/monty03/day14/file/'"
   ],
   "id": "f5689d5c81468e69",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-11T07:38:45.600514Z",
     "start_time": "2025-09-11T07:38:45.582733Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_excel(path + '查询.xlsx',index_col='序号')\n",
    "print(df)\n",
    "# 获取序号为1的学生的理论成绩\n",
    "# print(df.loc[1,'理论'])\n",
    "\n",
    "# 获取学号为2的学生的三科成绩\n",
    "# print(df.loc[2,['理论','机试','品德']])\n",
    "\n",
    "# 获取理论大于60且机试小于60的学生信息\n",
    "flag = (df['理论'] > 60) & (df['机试'] < 60)\n",
    "print(df.loc[flag])\n",
    "\n",
    "\n",
    "# 查询男性总分大于200的学生信息\n",
    "flag2 = (df['性别'] == '男') & (df['总分'] > 200)\n",
    "# print(df.loc[flag2,['姓名','总分']]) #姓名 和总分列\n",
    "# print(df.loc[flag,:])  # 所有列的内容\n",
    "# print(df.loc[flag2,'姓名':'总分']) # 姓名 到总分"
   ],
   "id": "76d80d0730b7e1f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     姓名 性别       出生日期  理论  机试  品德   总分                 地址\n",
      "序号                                                       \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202       上海市虹桥区长城小区A座\n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166      北京市海淀区太阳宫小区a座\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233     北京市房山区水墨林溪小区C座\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190     北京市丰台区恒大家园小区c座\n",
      "5   崔龙腾  男 2010-07-05  96  68  78  242       邯郸市肥乡区龙腾家园B座\n",
      "6   李欣桐  女 2014-12-21  77  75  45  197  呼和浩特市回族区第三小学家属院E座\n",
      "     姓名 性别       出生日期  理论  机试  品德   总分            地址\n",
      "序号                                                  \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202  上海市虹桥区长城小区A座\n"
     ]
    }
   ],
   "execution_count": 32
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 按照区间查询",
   "id": "6a900cd2f811b25d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-11T07:39:51.761844Z",
     "start_time": "2025-09-11T07:39:51.755948Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 查询总分呢在 180 - 210 之间的学生\n",
    "flag = (180< df['总分']) & (df['总分'] <210)\n",
    "# print(df.loc[flag])\n",
    "\n",
    "# 用between来实现\n",
    "flag2 = df['总分'].between(180, 210)\n",
    "print(df.loc[flag2])"
   ],
   "id": "67b3db7a4eb6903c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     姓名 性别       出生日期  理论  机试  品德   总分                 地址\n",
      "序号                                                       \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202       上海市虹桥区长城小区A座\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190     北京市丰台区恒大家园小区c座\n",
      "6   李欣桐  女 2014-12-21  77  75  45  197  呼和浩特市回族区第三小学家属院E座\n"
     ]
    }
   ],
   "execution_count": 33
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-11T07:45:28.325843Z",
     "start_time": "2025-09-11T07:45:28.316649Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 查询 2004年 - 2012年出生的学生\n",
    "start = '2004-01-01'\n",
    "end = '2012-12-31'\n",
    "# print(df['出生日期'])\n",
    "flag = (df['出生日期'] > start ) & (df['出生日期'] < end)\n",
    "# print(flag)\n",
    "print(df.loc[flag])"
   ],
   "id": "55400cbbe895e636",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     姓名 性别       出生日期  理论  机试  品德   总分              地址\n",
      "序号                                                    \n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166   北京市海淀区太阳宫小区a座\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233  北京市房山区水墨林溪小区C座\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190  北京市丰台区恒大家园小区c座\n",
      "5   崔龙腾  男 2010-07-05  96  68  78  242    邯郸市肥乡区龙腾家园B座\n"
     ]
    }
   ],
   "execution_count": 41
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 使用条件表达式进行查询",
   "id": "e211e6bafb1aa846"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-11T08:01:20.138229Z",
     "start_time": "2025-09-11T08:01:20.126588Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 查询所有的女生\n",
    "flag = df['性别'] == '女'\n",
    "# print(df.loc[flag])\n",
    "# 查询理论大于60且，机试 小于60\n",
    "flag2 = (df['理论'] > 60) & (df['机试'] < 60)\n",
    "# print(df.loc[flag2])\n",
    "\n",
    "# 查询理论大于60 或者品德大于90\n",
    "flag3 = (df['理论'] > 60) | (df['品德'] > 90)\n",
    "# print(df.loc[flag3])\n",
    "\n",
    "# 查询所有非男生\n",
    "# flag4 = df['性别'] != '男'\n",
    "flag4 =  ~(df['性别'] == '男')\n",
    "# print(df.loc[flag4])\n",
    "\n",
    "# 查询所有北京的学生， 地址字符串中包含北京 ,所有的字符串操作都需要 .str\n",
    "flag5 = df['地址'].str.contains('北京')\n",
    "print(df.loc[flag5])"
   ],
   "id": "3dc02c5d5d1a46ab",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     姓名 性别       出生日期  理论  机试  品德   总分                 地址\n",
      "序号                                                       \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202       上海市虹桥区长城小区A座\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233     北京市房山区水墨林溪小区C座\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190     北京市丰台区恒大家园小区c座\n",
      "6   李欣桐  女 2014-12-21  77  75  45  197  呼和浩特市回族区第三小学家属院E座\n",
      "     姓名 性别       出生日期  理论  机试  品德   总分              地址\n",
      "序号                                                    \n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166   北京市海淀区太阳宫小区a座\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233  北京市房山区水墨林溪小区C座\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190  北京市丰台区恒大家园小区c座\n"
     ]
    }
   ],
   "execution_count": 50
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-11T08:11:39.256211Z",
     "start_time": "2025-09-11T08:11:39.245089Z"
    }
   },
   "cell_type": "code",
   "source": [
    "print(df)\n",
    "# # 根据性别添加称呼列\n",
    "flag1 = df['性别'] == '男'\n",
    "df.loc[flag1,'称呼'] = '先生'\n",
    "\n",
    "df.loc[df['性别'] == '女','称呼'] = '女士'\n",
    "print(df)\n",
    "\n",
    "\n",
    "# 根据分数添加等级列 240 以上优秀 200-240 良好  180-200 中等， 180以下及格\n",
    "df.loc[df['总分'] >= 240,'等级'] = '优秀'\n",
    "df.loc[(df['总分'] < 240) & (df['总分'] >=200),'等级'] = '良好'\n",
    "df.loc[(df['总分'] >=180) & (df['总分'] < 200),'等级'] = '中等'\n",
    "df.loc[df['总分'] < 180,'等级'] = '及格'\n",
    "print(df)\n"
   ],
   "id": "e9e1bdabc24aeb06",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     姓名 性别       出生日期  理论  机试  品德   总分                 地址  称呼   等级\n",
      "序号                                                                \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202       上海市虹桥区长城小区A座  女士   良好\n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166      北京市海淀区太阳宫小区a座  先生  NaN\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233     北京市房山区水墨林溪小区C座  女士   良好\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190     北京市丰台区恒大家园小区c座  女士   中等\n",
      "5   崔龙腾  男 2010-07-05  96  68  78  242       邯郸市肥乡区龙腾家园B座  先生   优秀\n",
      "6   李欣桐  女 2014-12-21  77  75  45  197  呼和浩特市回族区第三小学家属院E座  女士   中等\n",
      "     姓名 性别       出生日期  理论  机试  品德   总分                 地址  称呼   等级\n",
      "序号                                                                \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202       上海市虹桥区长城小区A座  女士   良好\n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166      北京市海淀区太阳宫小区a座  先生  NaN\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233     北京市房山区水墨林溪小区C座  女士   良好\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190     北京市丰台区恒大家园小区c座  女士   中等\n",
      "5   崔龙腾  男 2010-07-05  96  68  78  242       邯郸市肥乡区龙腾家园B座  先生   优秀\n",
      "6   李欣桐  女 2014-12-21  77  75  45  197  呼和浩特市回族区第三小学家属院E座  女士   中等\n",
      "     姓名 性别       出生日期  理论  机试  品德   总分                 地址  称呼  等级\n",
      "序号                                                               \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202       上海市虹桥区长城小区A座  女士  良好\n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166      北京市海淀区太阳宫小区a座  先生  及格\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233     北京市房山区水墨林溪小区C座  女士  良好\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190     北京市丰台区恒大家园小区c座  女士  中等\n",
      "5   崔龙腾  男 2010-07-05  96  68  78  242       邯郸市肥乡区龙腾家园B座  先生  优秀\n",
      "6   李欣桐  女 2014-12-21  77  75  45  197  呼和浩特市回族区第三小学家属院E座  女士  中等\n"
     ]
    }
   ],
   "execution_count": 62
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## query 使用字符串表达式查询\n",
   "id": "27da6fd48e99faba"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-11T08:21:36.691347Z",
     "start_time": "2025-09-11T08:21:36.673679Z"
    }
   },
   "cell_type": "code",
   "source": [
    "## 查询总分呢在 180 - 210 之间的学生\n",
    "print(df.query('180 < 总分<200 '))\n",
    "\n",
    "## 查询理论大于60 且 机试 小于60\n",
    "print(df.query('理论 >60 and 机试<60'))\n",
    "\n",
    "# 查询特定城市的学生 (查询北京 的学生)\n",
    "#\n",
    "# flag = df['地址'].str.contains('北京')\n",
    "# print(df.loc[flag])\n",
    "\n",
    "flag2 = df['地址'].isin(['北京市海淀区太阳宫小区a座','上海市虹桥区长城小区A座'])\n",
    "print(df.loc[flag2])"
   ],
   "id": "43e5418e5fadb99a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     姓名 性别       出生日期  理论  机试  品德   总分                 地址  称呼  等级\n",
      "序号                                                               \n",
      "4   刘千琪  女 2004-04-19  48  44  98  190     北京市丰台区恒大家园小区c座  女士  中等\n",
      "6   李欣桐  女 2014-12-21  77  75  45  197  呼和浩特市回族区第三小学家属院E座  女士  中等\n",
      "     姓名 性别       出生日期  理论  机试  品德   总分            地址  称呼  等级\n",
      "序号                                                          \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202  上海市虹桥区长城小区A座  女士  良好\n",
      "     姓名 性别       出生日期  理论  机试  品德   总分             地址  称呼  等级\n",
      "序号                                                           \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202   上海市虹桥区长城小区A座  女士  良好\n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166  北京市海淀区太阳宫小区a座  先生  及格\n"
     ]
    }
   ],
   "execution_count": 74
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 用Lambda进行复杂查询",
   "id": "4685380cee9da1ed"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-11T08:25:41.691694Z",
     "start_time": "2025-09-11T08:25:41.683014Z"
    }
   },
   "cell_type": "code",
   "source": [
    "## 查询理论成绩大于60的背景学生\n",
    "print(df)\n",
    "\n",
    "print(df.loc[df.apply(lambda x:x['理论'] > 60 and '北京' in x['地址'],axis=1)])"
   ],
   "id": "9e959420c3590a9c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     姓名 性别       出生日期  理论  机试  品德   总分                 地址  称呼  等级\n",
      "序号                                                               \n",
      "1   谭鑫宇  女 2002-07-08  80  33  89  202       上海市虹桥区长城小区A座  女士  良好\n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166      北京市海淀区太阳宫小区a座  先生  及格\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233     北京市房山区水墨林溪小区C座  女士  良好\n",
      "4   刘千琪  女 2004-04-19  48  44  98  190     北京市丰台区恒大家园小区c座  女士  中等\n",
      "5   崔龙腾  男 2010-07-05  96  68  78  242       邯郸市肥乡区龙腾家园B座  先生  优秀\n",
      "6   李欣桐  女 2014-12-21  77  75  45  197  呼和浩特市回族区第三小学家属院E座  女士  中等\n",
      "     姓名 性别       出生日期  理论  机试  品德   总分              地址  称呼  等级\n",
      "序号                                                            \n",
      "2   韩耀祖  男 2005-06-09  76  66  24  166   北京市海淀区太阳宫小区a座  先生  及格\n",
      "3   聂茹凤  女 2012-07-06  98  99  36  233  北京市房山区水墨林溪小区C座  女士  良好\n"
     ]
    }
   ],
   "execution_count": 78
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
